Межтабличный UPDATE
Редко когда, но всё же приходится делать в базе данных одиночные запросы по перемещению существующих данных из одной таблицы в другую. И если с добавлением рядов используя INSERT проблем возникает мало, то с обновлением существующих таблиц у меня возникла трудность. А именно - была старая таблица Invision Powerboard форума, и имелась новая таблица пользователей, с одинаковыми пользователями.
Хотелось перенести поля из одной таблицы в другую. В самом худшем случае можно было написать цикл в php, где ряд за рядом делался бы одиночный UPDATE. Но поскольку лень - лучшая мотивация человечества к прогрессу, то по принципу наименьшего сопротивления пришлось обойтись таким запросом..
UPDATE sys_users
SET avatar = ( SELECT ibf_members.avatar
FROM ibf_members
WHERE sys_users.login = ibf_members.name LIMIT 0,1)
WHERE EXISTS ( SELECT 1
FROM ibf_members
WHERE sys_users.login = ibf_members.name )
Если интересно, то EXISTS выражение нужно только для возможности использования подзапроса, связывающего обе таблицы, раз уж в обычном UPDATE нельзя использовать несколько таблиц, единица это первое поле, а LIMIT нужен на случай дубликатов.